/*
基础数据类型
1. boolean
2. number
3. string
4. null和undefined
5. 数组
6. 元组(Tuple)
7. 枚举(enum)
8. any
9. void
10. object
*/
(function () {
    // 1. boolean
    let isDone = false;
    isDone = true;
    // isDone = 0  // error
    // 2. number
    let age = 3;
    age = -1.2;
    // age = 'abc'  // error
    // 3. string
    let name = 'abc';
    name = '';
    // name = {}  // error
    // 4. null和undefined  ==> null类型与undefined类型是任意其它类型的子类型
    let n = null;
    // n = 'abc' // error
    let u = undefined;
    // u = 123 // error
    name = null;
    name = undefined;
    // 5. 数组
    let names = ['abc', 'aaa' /* , true */];
    let names2 = ['sss', 'aaa' /* , 32 */];
    // 6. 元组(Tuple) 特别的数组(元素的个数和类型都是固定的)
    let nameAge;
    nameAge = ['tom', 12];
    // 7. 枚举(enum)
    let Color;
    (function (Color) {
        Color[Color["Red"] = 0] = "Red";
        Color[Color["Green"] = 2] = "Green";
        Color[Color["Blue"] = 3] = "Blue";
    })(Color || (Color = {}));
    console.log(Color);
    let myColor = Color.Green;
    const cat = {
        name: 'kk',
        color: 2
    };
    switch (cat.color) {
        case Color.Red:
            console.log('你的猫是红色');
            break;
        case Color.Green:
            console.log('你的猫是绿色');
            break;
        case Color.Blue:
            console.log('你的猫是蓝色');
            break;
        default:
            break;
    }
    // 8. any
    let arr3 = ['abc', 123];
    let a = 3;
    a = 'abc';
    // 9. void ==> 标识函数没有返回值
    function fn() {
        return true;
    }
    function fn2() {
        // return 2 // error
        // return undefined
        // return null
    }
    // 10. object 
    function fn3(obj) {
        // return {}
        // return () => {}
        // return []
        // return 3  // error
        // return null
        return undefined;
    }
    fn3({});
})();
/*

js 弱类型   声明变量不能指定类型
ts 强类型   声明变量时可以指定类型
强类型的好处:
  正确语法的提示补全
  错误语法的错误提示
*/ 
